/**
 * Classe chargée de la génération du code en rapport avec les entrées sorties du programme
 * 
 * @author BlobbyCompiloTeam
 *
 */
public class GenerationIO implements GramConstants
{
	
	private static MaP map; // Référence vers la machine à pile pour générer le code de sortie
	private int nbChaine;		// Compteur de chaine de caractère. Permet de mettre l'indice dans la déclaration ASM de la chaine de caractère.
	
	/**
	 * Constructeur de la classe
	 * @param _map La référence vers la machine à pile
	 */
	public GenerationIO(MaP _map)
	{
		map = _map;
		nbChaine = 0;
	}
	
	/**
	 * Génère le code pour lire un entier et le stocker dans une variable
	 * @param id L'identifiant de la variable dans laquelle stocker l'entier lu.
	 */
	public void lecture(IdVar id)
	{
		map.lire_ent(id.getOffset());
	}
	
	/**
	 * Passe à la ligne dans le fichier de sortie
	 */
	public void alaligne(){
		map.a_la_ligne();
	}
	
	/**
	 * Génère le code pour l'écriture d'une variable sur la sortie standard
	 * @param type Type du paramètre à écrire
	 */
	public void ecritureExpr(int type){
		
		if (type == typeBool){
			
			map.ecrire_bool();
			
		}else if (type == typeEnt){

			map.ecrire_ent();
		
		}else {
		
			MsgErreur.getErreur(Gram.token.beginLine, "GenerationIO.ecritureExpr");
		
		}
	}
	
	/**
	 * Permet d'écrire une chaine sur la sortie standard
	 * @param ch la chaine à écrire
	 */
	public void ecritureChaine(String ch){
		ch = ch.substring(1, ch.length()-1);
		nbChaine++;
		map.ecrire_chaine(ch,nbChaine);
	}
	
}
